package cn.easier.activity.console.utils;

import org.assertj.core.util.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * File工具类
 */
public class FileUtil {
    private static Logger logger = LoggerFactory.getLogger(FileUtil.class);
    private static final String FILE_FORMAT = ".jpg、.gif、.bmp、.png、.jpeg";
    public static final String EXCEL_FORMAT = "xls,xlsx";

    /**
     * 上传文件
     *
     * @param uploadFilePath 上传文件的路径和名称
     * @param file     文件
     * @return 上传是否成功
     */
    public static boolean uploadFile(String uploadFilePath, MultipartFile file) {
        if (file.isEmpty()) {
            return false;
        }
        File dest = new File(uploadFilePath);
        // 检测是否存在目录
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        try {
            file.transferTo(dest);
            return true;
        } catch (IllegalStateException e) {
            logger.error("上传文件:" + dest, e);
        } catch (IOException e) {
            logger.error("上传文件:" + dest, e);
        }
        return false;
    }

    /**
     * 处理上传文件
     *
     * @param srcUploadFile 文件
     * @return 文件名
     */
    public static String doFile(MultipartFile srcUploadFile, String path, String fileNamePrefix) {
        String returnfileName = "";
        if (srcUploadFile == null) {
            return returnfileName;
        }
        String fileName = srcUploadFile.getOriginalFilename();
        //如果存在文件名，那么上传文件
        if (!Strings.isNullOrEmpty(fileName)) {
            String datatimp = String.valueOf(System.currentTimeMillis());
            fileName = fileNamePrefix + datatimp + fileName.substring(fileName.lastIndexOf("."), fileName.length());
            String uploadFilePath = path + fileName;
            boolean flag = uploadFile(uploadFilePath, srcUploadFile);
            if (flag) {
                returnfileName = fileName;
            }
        }
        return returnfileName;
    }

    /**
     * 删除上传文件
     *
     * @param filePath 上传文件路径
     */
    public static void deleteFile(String filePath) {
        File file = new File(filePath);
        if (file.exists() && file.isFile()) {
            file.delete();
        }
    }

    /**
     * 图片文件格式验证
     *
     * @param fileName 文件名
     */
    public static boolean imageFormatVerification(String fileName){
        //格式验证
        String suffix = fileName.substring(fileName.lastIndexOf("."), fileName.length());
        String s = suffix.toLowerCase();
        String[] fileFormats = FILE_FORMAT.split("、");
        boolean fileFormatFlag = false;
        for(String fileFormat : fileFormats){
            if(fileFormat.equals(s)){
                fileFormatFlag = true;
                break;
            }
        }
        return fileFormatFlag;
    }

    /**
     * 文件格式验证
     *
     * @param fileName 文件名
     * @param fileFormat 文件格式  ("text,jpc,xls")
     */
    public static boolean fileFormatVerification(String fileName, String fileFormat){
        //格式验证
        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
        String[] fileFormats = fileFormat.split(",");
        boolean fileFormatFlag = false;
        for(String format : fileFormats){
            if(format.equals(suffix)){
                fileFormatFlag = true;
                break;
            }
        }
        return fileFormatFlag;
    }
}
